
#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура НайтиЧисло(Команда)
	ИскомоеЧисло = 75;
	Сообщение = Новый СообщениеПользователю;
	
	КоличествоПопыток = БинарныйПоиск(ИскомоеЧисло);
	
	Если КоличествоПопыток = Неопределено Тогда
		ТекстСообщения = НСтр("ru = 'Число не входит в диапозон 1..100'");
	Иначе
		ШаблонСообщения = НСтр("ru = 'Число %1 найдено за %2 попыток'");
		ТекстСообщения = СтрШаблон(ШаблонСообщения, ИскомоеЧисло, КоличествоПопыток);
	КонецЕсли;
	
	Сообщение.Текст = ТекстСообщения;
	Сообщение.Сообщить();
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаКлиенте
Функция БинарныйПоиск(ИскомоеЧисло)
	
	Массив = Новый Массив;
	
	Для Счетчик = 1 По 100 Цикл
		Массив.Добавить(Счетчик);
	КонецЦикла;
	
	КоличествоПопыток = 0;
	МинимальноеЧисло = Массив[0];
	МаксимальноеЧисло = Массив[Массив.Количество() - 1];
	Пока МинимальноеЧисло <= МаксимальноеЧисло Цикл
		КоличествоПопыток = КоличествоПопыток + 1;
		НайденноеЧисло = Цел((МинимальноеЧисло +  МаксимальноеЧисло) / 2);
		Если НайденноеЧисло = ИскомоеЧисло Тогда
			Возврат КоличествоПопыток;
		ИначеЕсли  НайденноеЧисло > ИскомоеЧисло Тогда
			МаксимальноеЧисло = НайденноеЧисло - 1;
		Иначе // НайденноеЧисло < ИскомоеЧисло
			МинимальноеЧисло = НайденноеЧисло + 1;
		КонецЕсли; 
	КонецЦикла;
	
	Возврат Неопределено;
	
КонецФункции

#КонецОбласти
